/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.com.remiseria.frame;

import ar.com.remiseria.bo.ViajeBO;
import ar.com.remiseria.entities.Viaje;
import ar.com.remiseria.utils.Constantes;
import ar.com.remiseria.utils.PropertiesReader;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author gdorrego
 */
public class AdministracionDeViajesFrame extends javax.swing.JFrame {

    private List<Viaje> listaViajes = new ArrayList<Viaje>();
    private int paginaActual = 1;
    private int paginasTotales = 1;

    /**
     * Creates new form AdministracionDeViajes
     */
    public AdministracionDeViajesFrame() {
        initComponents();
        this.getViajes();
        this.verificarPaginado();
        this.llenarFiltroComboBox();
        kilometrosTxt.setEnabled(false);
        costoTxt.setEnabled(false);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        viajesTable = new javax.swing.JTable();
        filtroComboBox = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        palabraClaveTxt = new javax.swing.JTextField();
        buscarBtn = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        estadosPosiblesComboBox = new javax.swing.JComboBox();
        confirmarBtn = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        kilometrosTxt = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        costoTxt = new javax.swing.JTextField();
        volverBtn = new javax.swing.JButton();
        limpiarBtn = new javax.swing.JButton();
        pagAnteriorBtn = new javax.swing.JButton();
        pagSiguienteBtn = new javax.swing.JButton();
        paginasLbl = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        actualizarTablaMenuBtn = new javax.swing.JMenuItem();
        confirmarCambioEstadoMenuBtn = new javax.swing.JMenuItem();
        volverMenuBtn = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        viajesTable.setFont(new java.awt.Font("DejaVu Sans", 0, 10)); // NOI18N
        viajesTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null, null}
            },
            new String [] {
                "CLIENTE", "ORIGEN", "DESTINO", "CHOFER", "AUTO", "FECHA Y HORA", "KM DE VIAJE", "COSTO", "ESTADO"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        viajesTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                viajesTableMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(viajesTable);

        jLabel1.setText("Filtrar por");

        jLabel2.setText("Palabra clave");

        buscarBtn.setText("BUSCAR");
        buscarBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscarBtnActionPerformed(evt);
            }
        });

        jLabel3.setText("Pasar seleccionado a");

        estadosPosiblesComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                estadosPosiblesComboBoxActionPerformed(evt);
            }
        });

        confirmarBtn.setText("Confirmar");
        confirmarBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                confirmarBtnActionPerformed(evt);
            }
        });

        jLabel4.setText("KM DE VIAJE");

        jLabel5.setText("COSTO    $");

        volverBtn.setText("Volver");
        volverBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                volverBtnActionPerformed(evt);
            }
        });

        limpiarBtn.setText("LIMPIAR");
        limpiarBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                limpiarBtnActionPerformed(evt);
            }
        });

        pagAnteriorBtn.setText("Ant");
        pagAnteriorBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pagAnteriorBtnActionPerformed(evt);
            }
        });

        pagSiguienteBtn.setText("Sig");
        pagSiguienteBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pagSiguienteBtnActionPerformed(evt);
            }
        });

        paginasLbl.setText("Pagina X de Y");

        jMenu1.setText("Archivo");

        actualizarTablaMenuBtn.setText("Actualizar tabla");
        actualizarTablaMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actualizarTablaMenuBtnActionPerformed(evt);
            }
        });
        jMenu1.add(actualizarTablaMenuBtn);

        confirmarCambioEstadoMenuBtn.setText("Confirmar cambio de estado");
        confirmarCambioEstadoMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                confirmarCambioEstadoMenuBtnActionPerformed(evt);
            }
        });
        jMenu1.add(confirmarCambioEstadoMenuBtn);

        volverMenuBtn.setText("Volver");
        volverMenuBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                volverMenuBtnActionPerformed(evt);
            }
        });
        jMenu1.add(volverMenuBtn);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(buscarBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(28, 28, 28)
                        .addComponent(limpiarBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(volverBtn)
                        .addContainerGap())
                    .addComponent(jScrollPane1)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(filtroComboBox, 0, 136, Short.MAX_VALUE)
                            .addComponent(palabraClaveTxt))
                        .addGap(21, 21, 21)
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(estadosPosiblesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 166, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(kilometrosTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel5)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(costoTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(36, 36, 36)
                        .addComponent(confirmarBtn)
                        .addGap(12, 12, 12))))
            .addGroup(layout.createSequentialGroup()
                .addGap(363, 363, 363)
                .addComponent(pagAnteriorBtn)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginasLbl)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pagSiguienteBtn)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(pagAnteriorBtn)
                    .addComponent(pagSiguienteBtn)
                    .addComponent(paginasLbl))
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel1)
                        .addComponent(filtroComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(costoTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel5)
                        .addComponent(kilometrosTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4)
                        .addComponent(estadosPosiblesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel3))
                    .addComponent(confirmarBtn))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(palabraClaveTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, Short.MAX_VALUE)
                        .addComponent(volverBtn)
                        .addGap(21, 21, 21))
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(buscarBtn)
                            .addComponent(limpiarBtn))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void volverBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_volverBtnActionPerformed
        this.irAMenuPrincipal();
    }//GEN-LAST:event_volverBtnActionPerformed

    private void buscarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarBtnActionPerformed
        this.buscarPorFiltro();
    }//GEN-LAST:event_buscarBtnActionPerformed

    private void limpiarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_limpiarBtnActionPerformed
        filtroComboBox.setSelectedIndex(0);
        palabraClaveTxt.setText("");
        this.getViajes();
    }//GEN-LAST:event_limpiarBtnActionPerformed

    private void viajesTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_viajesTableMouseClicked
        this.llenarEstadosPosibles();
    }//GEN-LAST:event_viajesTableMouseClicked

    private void estadosPosiblesComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_estadosPosiblesComboBoxActionPerformed
        this.validarEstadoSiguiente();
    }//GEN-LAST:event_estadosPosiblesComboBoxActionPerformed

    private void confirmarBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmarBtnActionPerformed
        this.confirmarCambioDeEstado();
    }//GEN-LAST:event_confirmarBtnActionPerformed

    private void actualizarTablaMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actualizarTablaMenuBtnActionPerformed
        this.getViajes();
    }//GEN-LAST:event_actualizarTablaMenuBtnActionPerformed

    private void confirmarCambioEstadoMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_confirmarCambioEstadoMenuBtnActionPerformed
        this.confirmarCambioDeEstado();
    }//GEN-LAST:event_confirmarCambioEstadoMenuBtnActionPerformed

    private void volverMenuBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_volverMenuBtnActionPerformed
        this.irAMenuPrincipal();
    }//GEN-LAST:event_volverMenuBtnActionPerformed

    private void pagAnteriorBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pagAnteriorBtnActionPerformed
        paginaActual--;
        this.getViajes();
        this.verificarPaginado();
    }//GEN-LAST:event_pagAnteriorBtnActionPerformed

    private void pagSiguienteBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pagSiguienteBtnActionPerformed
        paginaActual++;
        this.getViajes();
        this.verificarPaginado();
    }//GEN-LAST:event_pagSiguienteBtnActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeViajesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeViajesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeViajesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AdministracionDeViajesFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AdministracionDeViajesFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem actualizarTablaMenuBtn;
    private javax.swing.JButton buscarBtn;
    private javax.swing.JButton confirmarBtn;
    private javax.swing.JMenuItem confirmarCambioEstadoMenuBtn;
    private javax.swing.JTextField costoTxt;
    private javax.swing.JComboBox estadosPosiblesComboBox;
    private javax.swing.JComboBox filtroComboBox;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField kilometrosTxt;
    private javax.swing.JButton limpiarBtn;
    private javax.swing.JButton pagAnteriorBtn;
    private javax.swing.JButton pagSiguienteBtn;
    private javax.swing.JLabel paginasLbl;
    private javax.swing.JTextField palabraClaveTxt;
    private javax.swing.JTable viajesTable;
    private javax.swing.JButton volverBtn;
    private javax.swing.JMenuItem volverMenuBtn;
    // End of variables declaration//GEN-END:variables

    private void irAMenuPrincipal() {
        MenuPrincipalFrame mpf = new MenuPrincipalFrame();
        mpf.setVisible(true);
        this.dispose();
    }

    private void getViajes() {
        ViajeBO viajeBO = new ViajeBO();
        try {

            listaViajes = viajeBO.getAllViajesOrderByFecha(paginaActual);

        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(this, ex);
        }

        if (listaViajes != null && !listaViajes.isEmpty()) {

            DefaultTableModel modelo = new DefaultTableModel();
            modelo.addColumn("CLIENTE");
            modelo.addColumn("ORIGEN");
            modelo.addColumn("DESTINO");
            modelo.addColumn("CHOFER");
            modelo.addColumn("AUTO");
            modelo.addColumn("FECHA Y HORA");
            modelo.addColumn("KM DE VIAJE");
            modelo.addColumn("COSTO");
            modelo.addColumn("ESTADO");

            for (Viaje viaje : listaViajes) {
                Object[] viajes = new Object[9];
                viajes[0] = viaje.getClienteSolicitante().getTelefono();

                viajes[1] = viaje.getDomicilioOrigen().toString();

                viajes[2] = viaje.getDomicilioDestino().toString();

                viajes[3] = "" + viaje.getChoferAsignado().getCodigo() + " - " + viaje.getChoferAsignado().getApellido();

                viajes[4] = viaje.getAutoAsignado().getPatente();

                viajes[5] = viaje.getFechaDeRecogida().getTime().toGMTString();

                if (viaje.getKmDeViaje() != null) {
                    viajes[6] = viaje.getKmDeViaje();
                } else {
                    viajes[6] = "";
                }

                if (viaje.getCostoViaje() != null) {
                    viajes[7] = viaje.getCostoViaje();
                } else {
                    viajes[7] = "";
                }

                viajes[8] = viaje.getEstado();

                modelo.addRow(viajes);
            }

            viajesTable.setModel(modelo);

        }

    }

    private void llenarFiltroComboBox() {

        DefaultComboBoxModel model = (DefaultComboBoxModel) filtroComboBox.getModel();
        DefaultTableModel tModel = (DefaultTableModel) viajesTable.getModel();
        int cantidadColumnas = tModel.getColumnCount();
        model.addElement("");
        for (int i = 0; i < cantidadColumnas; i++) {
            model.addElement(tModel.getColumnName(i));
        }

        filtroComboBox.setModel(model);

    }

    private void buscarPorFiltro() {
        String filtro = (String) filtroComboBox.getSelectedItem();
        String palabraClave = palabraClaveTxt.getText();
        if (("").equals(filtro) || ("").equals(palabraClave)) {
            JOptionPane.showMessageDialog(this, PropertiesReader.getInstance().getApplicationMessage("error.viajes.filtrovacio"));
        } else {
            ViajeBO viajeBO = new ViajeBO();
            List<Viaje> viajes = new ArrayList<Viaje>();
            try {
                viajes = viajeBO.getViajesByFiltro(filtro, palabraClave);
            } catch (Exception ex) {
                Logger.getLogger(AdministracionDeViajesFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (viajes != null && !viajes.isEmpty()) {
                this.verResultadosFiltro(viajes);
            } else if (viajes != null && viajes.isEmpty()) {
                JOptionPane.showMessageDialog(this, "No se encontraron viajes\ncon los filtros ingresados.");
            }

        }
    }

    private void verResultadosFiltro(List<Viaje> viajesList) {
        listaViajes = viajesList;

        if (listaViajes != null && !listaViajes.isEmpty()) {

            DefaultTableModel modelo = new DefaultTableModel();
            modelo.addColumn("CLIENTE");
            modelo.addColumn("ORIGEN");
            modelo.addColumn("DESTINO");
            modelo.addColumn("CHOFER");
            modelo.addColumn("AUTO");
            modelo.addColumn("FECHA Y HORA");
            modelo.addColumn("KM DE VIAJE");
            modelo.addColumn("COSTO");
            modelo.addColumn("ESTADO");

            for (Viaje viaje : listaViajes) {
                Object[] viajes = new Object[9];
                viajes[0] = viaje.getClienteSolicitante().getTelefono();

                viajes[1] = viaje.getDomicilioOrigen().toString();

                viajes[2] = viaje.getDomicilioDestino().toString();

                viajes[3] = "" + viaje.getChoferAsignado().getCodigo() + " - " + viaje.getChoferAsignado().getApellido();

                viajes[4] = viaje.getAutoAsignado().getPatente();

                viajes[5] = viaje.getFechaDeRecogida().getTime().toGMTString();

                if (viaje.getKmDeViaje() != null) {
                    viajes[6] = viaje.getKmDeViaje();
                } else {
                    viajes[6] = "";
                }

                if (viaje.getCostoViaje() != null) {
                    viajes[7] = viaje.getCostoViaje();
                } else {
                    viajes[7] = "";
                }

                viajes[8] = viaje.getEstado();

                modelo.addRow(viajes);
            }

            viajesTable.setModel(modelo);
        }
    }

    private void llenarEstadosPosibles() {
        String estadoActual = (String) viajesTable.getValueAt(viajesTable.getSelectedRow(), 8);
        estadosPosiblesComboBox.removeAllItems();
        kilometrosTxt.setEnabled(false);
        kilometrosTxt.setText("");
        costoTxt.setEnabled(false);
        costoTxt.setText("");

        /*
         · Si el estado actual del viaje es PENDIENTE, se puede pasar a CANCELADO o EN CURSO
        
         · Si el estado actual es EN CURSO, se puede pasar a CERRADO o CANCELADO
        
         · Si el estado actual es CERRADO o CANCELADO, no se puede pasar a ningun otro estado
         */
        if (estadoActual.equalsIgnoreCase(Constantes.ESTADO_VIAJE_PENDIENTE)) {
            estadosPosiblesComboBox.addItem(Constantes.ESTADO_VIAJE_EN_CURSO);
            estadosPosiblesComboBox.addItem(Constantes.ESTADO_VIAJE_CANCELADO);
//            kilometrosTxt.setEnabled(false);
//            kilometrosTxt.setText("");
//            costoTxt.setEnabled(false);
//            costoTxt.setText("");
        } else if (estadoActual.equalsIgnoreCase(Constantes.ESTADO_VIAJE_EN_CURSO)) {
            estadosPosiblesComboBox.addItem(Constantes.ESTADO_VIAJE_CERRADO);
            estadosPosiblesComboBox.addItem(Constantes.ESTADO_VIAJE_CANCELADO);
//            kilometrosTxt.setEnabled(true);
//            kilometrosTxt.setText("");
//            costoTxt.setEnabled(true);
//            costoTxt.setText("");
        }

    }

    private void validarEstadoSiguiente() {
        String estadoSiguiente = (String) estadosPosiblesComboBox.getSelectedItem();
        if(estadoSiguiente != null){
            if (estadoSiguiente.equalsIgnoreCase(Constantes.ESTADO_VIAJE_CERRADO)) {
                kilometrosTxt.setEnabled(true);
                costoTxt.setEnabled(true);
            } else {
                kilometrosTxt.setEnabled(false);
                kilometrosTxt.setText("");
                costoTxt.setEnabled(false);
                costoTxt.setText("");
            }
        }
    }

    private void confirmarCambioDeEstado() {
        String estadoSiguiente = (String) estadosPosiblesComboBox.getSelectedItem();
        int index = viajesTable.getSelectedRow();

        Viaje viaje = (Viaje) listaViajes.get(index);
        viaje.setEstado(estadoSiguiente);
        if (estadoSiguiente.equalsIgnoreCase(Constantes.ESTADO_VIAJE_CERRADO)) {
            viaje.setKmDeViaje(Double.valueOf(kilometrosTxt.getText()));
            viaje.setCostoViaje(Double.valueOf(costoTxt.getText()));
        }

        try {
            ViajeBO viajeBO = new ViajeBO();
            viaje = viajeBO.updateViaje(viaje);
            JOptionPane.showMessageDialog(this, "Viaje actualizado");
        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(this, ex);
        } finally {
            this.getViajes();
        }
    }

    private void verificarPaginado() {
         ViajeBO viajeBO = new ViajeBO();
        int viajesTotales = 0;
        
        try{
            viajesTotales = viajeBO.getChoferesCount(); 
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        if(viajesTotales != 0){
            int cantidadPaginas = viajesTotales % Constantes.PAG_MAX_RESULTS;
            if(cantidadPaginas == 0){
                cantidadPaginas = viajesTotales / Constantes.PAG_MAX_RESULTS;
            }else{
                cantidadPaginas = (viajesTotales / Constantes.PAG_MAX_RESULTS) + 1;
            }
            paginasTotales = cantidadPaginas;
        }
        
        paginasLbl.setText("Pagina "+paginaActual+" de "+paginasTotales);
        
        if(paginaActual == 1){
            pagAnteriorBtn.setEnabled(false);
        }else{
            pagAnteriorBtn.setEnabled(true);
        }
        
        if(paginaActual == paginasTotales){
            pagSiguienteBtn.setEnabled(false);
        }else{
            pagSiguienteBtn.setEnabled(true);
        }
    }
}
